/**
 * MODULE  DU CLIENT OU UTILISATEUR
 * -------------------------------
 * 
 * Le client ou utilisateur choisit un menu (1) puis
 * commande son menu des qu'un serveur arrive(2). Il attends ensuite
 * qu'on lui serve successivement son entrée (3),son plat principal(4) et
 * son dessert(5). Enfin une fois son repas mangé, il attends le serveur
 * pour payer et donner un note au repas (6).
 * 
 * 
 **/
  
:- module(client,[
		
	]).
 
  /**
   * I. NOM DU CLIENT
   *   Afin de pouvoir identifier les clients on leur donne un nom.
   *   
   **/
   client(nom_client).
   
   
   /**
    * II.  LES ETATS D'UN CLIENT
    * 
    *  Les états d'un client seront les suivants :
    *
    *   EN_COMMANDE - Le client attends que le serveur
    *   recupèrer sa commande.
    *
    *   EN_PAIEMENT - Le client attend le serveur pour effectuer
    *   son paiement.
    *
    *   EN_ATTENTE_[ENTREE|PLAT_PRINCIPAL|DESSERT] - Le client est dans cet état
    *   respectivement lorsqu'il attends de reçevoir une entrée, une plat principal
    *   et un dessert.
    *
    *   [ENTREE|PLAT_PRINCIPAL|DESSERT]_SERVI - Le client sera dans cet état lorsqu'il
    *   aura reçu respectivement entrée,plat principal ou dessert de la part du 
    *   client.
    *
    **/
    

 /** III - LES ACTIONS DU CLIENT.
   *
   * Les actions seront codées avec la syntaxe suivante :

   *    action(ACTION,CONDITION,A_SUPPRIMER,A_AJOUTER)
   *
   ****
   *    
   *    ACTION      :  action à executer
   *
   *    CONDITION   :  ensemble des conditions préalable à l'action.
   *
   *    A_SUPPRIMER :  ensembles etats,condition qui ne seront plus
   *                   valides après execution de l'environement.
   *
   *    A_AJOUTER   :  ensemble des nouvelles conditions valides après
   *                   execution de l'action.            
   *
   
   * II-1. CHOISIR MENU
   *
   *
   * L'action de choisir un menu est la première action qu'un client peut faire
   * lors de sa création.
   * 
   * CONDITIONS:
   *   
   *    Un client ne peut être servie qu'une et une seule fois.
   **/
   choisir_menu().
   
   
   /**
    * II-2. COMMANDER_MENU.
    *
    *   Cette action permet au client de commander un menu au restaurant. 
    *
    *   CONDITIONS :
    *
    *   	 Un menu à été choisit ET un serveur est present.   
    **/
     commander_menu().
     
     
   /**
    * II-3. CONSOMMER_ENTREE
    *
    *   Le client consomme l'entrée qui lui est servie. 
    *   
    *   CONDITIONS:
    *
    *      L'entree est servie au client par le serveur
    **/
    consommer_entree().
    
       /**
    * II-4. CONSOMMER_PLAT_PRINCIPAL
    *
    *   Le client consomme l'entrée qui lui est servie. 
    *   
    *   CONDITIONS:
    *
    *     Le plat principal est servie au client par le serveur.
    **/
    consommer_plat_principal().
    
  /**
    * II-5. CONSOMMER_DESSERT
    *
    *   Le client consomme l'entrée qui lui est servie. 
    *   
    *   CONDITIONS:
    *
    *      Le desset est servie par le serveur au client.
    **/
    consommer_dessert().
    
    
    
   /**
    * II-6. PAYER_COMMANDE
    *
    *   Elle permet au client de payer son repas au serveur.
    *
    *   CONDITION:
       
    *     Le client est en attente de paiement ET le serveur est présent
    **/
    payer_commande().